import base64

import cv2
import numpy as np


def numpyimage2base64png(arr):
    # 确保数组是uint8类型
    if arr.dtype != np.uint8:
        arr = (arr * 255).astype(np.uint8)

    # 如果是灰度图(2D)，增加通道维度
    if len(arr.shape) == 2:
        arr = np.expand_dims(arr, axis=-1)

    # 使用cv2编码为PNG格式
    success, buffer = cv2.imencode('.png', arr)
    if not success:
        raise ValueError("图像编码失败")

    # 转换为Base64字符串
    return f'data:image/png;base64,{base64.b64encode(buffer).decode('utf-8')}'